Los datos cuentan historias, las investigaciones deben ser compartidas, las visualizaciones análizadas, los resultados de las hipótesis planteadas pueden evaluarse, algunas veces son auditadas y otras veces los cálculos deben ser reproducibles por temas de transparencia o por evaluación. Un ejemplo de compartir o revisar el cálculo de algunos indicadores podría ser el reporte de la Enigh2018_indicadores_R en el que presenta su código del cálculo de los principales indicadores en R.
Una cosa es compartir los resultados y otra cosa compartir el código..pero en un archivo Rmarkdown se podría compartir ambos tanto en formato R para que sea evaluado, auditado y revisar el código etc.. como en formato html donde únicamente presentas los resultados. Hay que tener en cuenta que un archivo Rmarkdown genera un archivo html por lo tanto es independiente a R o sea que al compartirlo la persona no requiere tener R instalado.
Antes de iniciar con archivos rmarkdown te sugiero que revises la cheatsheet donde te servirá de guía para darle formato al texto o a la presentación. Para el formato mostrado se usará una plantilla de la librería "prettydoc" así que si no la tienes puedes instalarla en un script de R con el comando install.packages("prettydoc",dependencies=T)
Para abrir un archivo en rmarkdown debes hacer lo siguiente ..
Al darle clic en la opción rmarkdown te dirige a a esta ventana, Si usas la paquetería base en esa ventana pon tu nombre y título de investigación presentación etc
En este ejericio debes ir a from Template usa (opcional) la plantilla prettydoc en document
Y te va a agenerar una platilla similar a la siguiente captura, con ejemplos de script, títulos, notas de página y varios tips... pero borra todo MENOS la parte del cuadro rojo .
En la captura del cuadro rojo muestra los siguientes elementos:
title: "pon el título que quieras"author: "tu nombre"date: r sys.Date() #es una función de R, pone el día en automático, puedes editarla o dejarla así.output: #Resultado de tu archivo, o sea indica que generará un html_pretty con el theme o plantilla de hpstr puedes usar cayman leonids etc..Antes de empezar a redactar hay algo que debemos hacer .. al escribir en un software que usan miles de personas al rededor del mundo .. debemos de buscar la codificación de carácteres en la que podemos redactar sin problemas y guardarlo con esa codificación. Si preguntas qué pasa si no hago este paso, la respuesta es que podría sustituir algunas tildes/acentos o sea en lugar de que se vea ¿Cuál es la diferencia? el resultado al guardarlo y retomar para seguir escribiendo sería ¿cu/a~/l es la diferencia? no al ejecutarlo pero sí al querer continuar con el archivo así que mejor haz el encoding desde el principio.
La ruta para guardarlo con la codificación de carácteres es la siguiente:
y una vez ahí selecciona:
Ahora sí ya puedes escribir, poner acentos y listo
A diferencia de usar símbolos de gatos para poner texto como en los scripts de R aquí es diferente ya que TODO el archivo es un formato de texto y donde deseas integrar operaciones u objetos de código ya sea de R, python, SQL debes indicar por medio de pedazos dentro del archivo de texto.
Entonces el código se verá así cuando no tengamos ningún código de R, ni python ni SQL.. úncamente texto y algunas comillas asteríscos y símbolos de gatos ayudan a darle el formato.. si quieres practicar usa la hoja de referencia :) cheatsheet
O sea hasta ahora es puro texto, pero recuerda que un rmarkdown es un archivo INDEPENDIENTE DE R así que aúnque ya tengas cargados en tu enviroment tus bases de datos librerías etc es necesario cargarlas en tu archivo de R y para eso nos apoyamos en un chunk .. para ínsertar uno la función de teclado es contrl+alt+i = chunk y ahí ya puedes iniciar con código de R
En la captura anterior cargo las librerías .. y me sale un error .. porque la librería no existe o no está instalada ... por lo tanto el chunk completo ya no se ejectura y al querer hacer la transformación a un html indicará un error (si requieres instalar alguna, puedes instalarla en el chunk y luego borrar el comando "instal.packages" ya después solo llama la librería
#Aquí ya usé código de R y es como si escribiera en la consola,
#puedo cargar librerías y llamar a bases de datos.
library(tidyverse)## -- Attaching packages --------------------------------------------------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2 v purrr 0.3.4
## v tibble 3.0.3 v dplyr 1.0.1
## v tidyr 1.1.1 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts ------------------------------------------------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(plotly)##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(foreign)
library(readxl)
catalogo <- read_excel("ENTIDAD_FEDERATIVA_201602.xlsx")
enigh <- read.dbf("enigh2018_ns_concentradohogar_dbf/concentradohogar.dbf")Una vez cargadas las bases dentro de un chunk puedes ejecutar línea por línea o en la esquina superior izquierda hay un triángulo verde y si le das clic se ejecuta todo el chunk, si hay algún error lo mostrará en rojo, pero lo que hace R es que ejecuta el código y muestra el código, los warning y algunos mensajes.. si quieres omitir podemos hacerlo por partes. dentro de las opciones del chunk so debes poner la siguiente función en el chunk: {r echo=FALSE, message=FALSE, warning=FALSE}
echo= FALSE únicamente muestra los resultadosmessage= FALSE oculta los mensajes que pueden indicar como versión de la libreríawarning= FALSE oculta los warningsLa siguiente lista te puede dar una referencia rápida para integrar títulos, subtitulos, negritas, ecuaciones etc.
la ventaja del rmarkdown es que puedes integrar ecuaciones ya sea para mostrar la ecuación del modelo de tu investigación \[Y=\beta_0 +\beta_1x_1+\beta_2x_2+u\] o solo como referencias Probabilidad binomial está definida como ..\[f(y|N,p) = \frac{N!}{y!(N-y)!}\cdot p^y \cdot (1-p)^{N-y} = {{N}\choose{y}} \cdot p^y \cdot (1-p)^{N-y}\] Si sabes latex podría facilitarte mucho pero para las personas que se nos complica usamos siempre ya se aun libro como apoyo u hojas de referencia :) .. en este libro de Rmarkdown en el capítulo 2.5.3 math expresions puedes investigar más sobre expresiones mátemáticas en latex aplicado a Rmarkdown pero si no vas a usar ecuaciones basta con la hoja de referencia y las opciones del chunk para darle formato al archivo final.. pero bueno una referencia rápida al introducir ecuaciones es "$$Y=\beta_0 +\beta_1x_1+\beta_2x_2+u$$" o sea el símbolo de $$aquí va la expresión$$, para subindices usa guión bajo, para exponente usa ^2, y para las letras .. alpha, beta, separados por el caracter \ en mi computadora ese caracter se pone con altGr + símbolo de interrogación ? o sea altGr +? = \
Practica este formato con las clases anteriores, carga las bases de datos dentro del rmarkdown introduce las visualizaciones, introduce visualizaciones dinámicas, intenta escribir una ecuación y ya apartir de aquí usaremos rmarkdown para poder compartir :)
uniones de bases de datos, las uniones nos sirven mucho al querer relacionar las bases de datos con otra, complementarla o encontrar diferencias respecto a una con otra. hay ciertas características que deben seguir los join.
Aquí una imagen en la cuál puedes apoyar para saber los joins más comúnes y como se forman.
En el caso de la enigh para unir con la claveEntidad de otro archivo se Crea la variable estado a partir de la etracción de los primeros dígitos de la variable "ubica_geo"
enigh <- enigh %>%
mutate(Estado=substring(ubica_geo,1,2),
sexo=ifelse(sexo_jefe==1,"Hombre","Mujer"))Identificar la clase al que son ambas variables con el comando "class"
class(enigh$Estado)## [1] "character"
class(catalogo$CATALOG_KEY)## [1] "character"
Si ambos son del mismo tipo ##¿Ya puedo unirlas?
No, ya se cumplió la primera regla pero ahora debemos cambiar el nombre. con el comando rename
catalogo <- catalogo %>% rename(Estado=CATALOG_KEY)
colnames(catalogo)## [1] "Estado" "ENTIDAD_FEDERATIVA" "ABREVIATURA"
En la hoja de referencia data wranglig encontrarás un poco más de información sobre los join y diferencias de cada uno.
Obervaciones que no están en común, la enigh cuenta con los estados desde 01 hasta el 32 por lo tanto no tiene estas tres observaciones .. y al hacer el antijoin indica las observaciones que no tiene en común el catálogo con la ENIGH
anti_join(catalogo,enigh,by="Estado")## # A tibble: 3 x 3
## Estado ENTIDAD_FEDERATIVA ABREVIATURA
## <chr> <chr> <chr>
## 1 00 NO ESPECIFICADO NE
## 2 88 NO APLICA NA
## 3 99 SE IGNORA SI
Si lo ejecutas al revés indica que tiene una base con 0 rows o sea 0 registros, ya que la enigh en la variable Estado (por la que se unió) no existe el Estado "00", "88" ni "99"
anti_join(enigh,catalogo,by="Estado")## [1] folioviv foliohog ubica_geo tam_loc est_socio est_dis
## [7] upm factor clase_hog sexo_jefe edad_jefe educa_jefe
## [13] tot_integ hombres mujeres mayores menores p12_64
## [19] p65mas ocupados percep_ing perc_ocupa ing_cor ingtrab
## [25] trabajo sueldos horas_extr comisiones aguinaldo indemtrab
## [31] otra_rem remu_espec negocio noagrop industria comercio
## [37] servicios agrope agricolas pecuarios reproducc pesca
## [43] otros_trab rentas utilidad arrenda transfer jubilacion
## [49] becas donativos remesas bene_gob transf_hog trans_inst
## [55] estim_alqu otros_ing gasto_mon alimentos ali_dentro cereales
## [61] carnes pescado leche huevo aceites tuberculo
## [67] verduras frutas azucar cafe especias otros_alim
## [73] bebidas ali_fuera tabaco vesti_calz vestido calzado
## [79] vivienda alquiler pred_cons agua energia limpieza
## [85] cuidados utensilios enseres salud atenc_ambu hospital
## [91] medicinas transporte publico foraneo adqui_vehi mantenim
## [97] refaccion combus comunica educa_espa educacion esparci
## [103] paq_turist personales cuida_pers acces_pers otros_gas transf_gas
## [109] percep_tot retiro_inv prestamos otras_perc ero_nm_viv ero_nm_hog
## [115] erogac_tot cuota_viv mater_serv material servicio deposito
## [121] prest_terc pago_tarje deudas balance otras_erog smg
## [127] Estado sexo
## <0 rows> (or 0-length row.names)
En este ejercicio ya al existir la mism avariable en común se hace la unión para poner los nombre de cada estado a la ENIGH a partir de la clave de entidad y después lo conectamos con un select para que ordene la base , primero el Estado, la Entidad_ederativa, Abreviatura y luego toooodo lo demás .
enigh <- left_join(enigh,catalogo,by="Estado") %>%
select(Estado,ENTIDAD_FEDERATIVA,ABREVIATURA,everything())Recuerda con la opción del chunk puedes esconder el código y dejar únicamente el resultado .ra este gráfico lo oculté y unicamente comparto el resultado, el código lo puedes encontrar en el archivo R que se subió junto con este archivo.
library(plotly)
g1 <- enigh %>%
filter(est_socio==1) %>% #estrato socio económico BAJO
group_by(ENTIDAD_FEDERATIVA,sexo) %>% #agrupa Estado y sexo
dplyr::summarise(Mediaing=mean(ingtrab)/3) %>%
pivot_wider(names_from = sexo,values_from = Mediaing) %>% #transpuesta del sexo"
mutate(Diferencia=Hombre-Mujer) %>%
ggplot(aes(reorder(ENTIDAD_FEDERATIVA,Diferencia),Diferencia))+ #reordenar en el eje x
geom_col(aes(fill=Diferencia))+
scale_fill_gradient(low = "yellow",high = "red")+
labs(x="Estado",
y="Brecha de Ingreso",
title = "Brecha de ingreso por Entidad")+
coord_flip()+scale_y_continuous(labels = scales::dollar)## `summarise()` regrouping output by 'ENTIDAD_FEDERATIVA' (override with `.groups` argument)
ggplotly(g1)